{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "fd298347",
   "metadata": {},
   "source": [
    "# 主动学习\n",
    "https://zhuanlan.zhihu.com/p/239756522\n",
    "https://www.cvmart.net/community/detail/6018\n",
    "https://www.rcrai.com/newsinfo/450691.html\n",
    "\n",
    "* Discriminative Active Learning (DAL)\n",
    "    * 假设大量的未标注数据可反映或者近似反映真实的数据分布，我们希望有标注数据也能尽可能的反映真实的数据分布，那就意味着希望有标注数据和未标注数据可表示同一个数据分布。DAL对有标注的样本打上标签0，未标注的样本打上标签1，使用二分类模型对标注好的样本进行训练，训练后对未标注样本进行预测，若未标注集样本以高置信度分为未标注集，意味该未标注样本和标注样本区别大，该样本信息多，标注集应该加入这个样本促使两者分布相似。其中可利用有标注数据学习到的样本的embedding作为二分类模型样本的输入特征。\n",
    "参考论文：Gissin D, Shalev-Shwartz S. Discriminative active learning[J]. arXiv preprint arXiv:1907.06347, 2019.\n",
    "其中序列标注任务中的LC和Margin策略的置信度为各token的置信度平均值（即结果不受序列长度的影响）。\n",
    "\n",
    "\n",
    "* 不确定性采样的查询（Uncertainty Sampling）,将模型中难以区分的样本数据提取出来\n",
    "    * 置信度最低(Least Confident),对未标注数据进行预测，若该样本的最大概率比其余样本的最大概率要小，只考虑了最大的概率\n",
    "    * 边缘采样(Margin Sampling),极容易被判定成两类的样本数据，或者说该样本的最大概率和第二大概率的差值较小，最大的和次大的两个概率\n",
    "    * 熵方法（Entropy）考虑该模型对某个样本的所有类别判定结果；\n",
    "* 基于委员会的查询（Query-By-Committee），基于集成学习的思想，综合多个模型预测结果\n",
    "    * 投票熵（Vote Entropy）：选择这些模型都无法区分的样本数据；\n",
    "    * 平均 KL 散度（Average Kullback-Leibler Divergence）：选择 KL 散度较大的样本数据。\n",
    "* 基于模型变化期望的查询（Expected Model Change）\n",
    "    * 选择那些使得梯度变化最大的样本数据\n",
    "* 基于误差减少的查询（Expected Error Reduction）；\n",
    "    * 选择那些通过增加一个样本就使得 loss 函数减少最多的样本数据\n",
    "* 基于方差减少的查询（Variance Reduction）；\n",
    "    * 选择那些方差减少最多的样本数据\n",
    "* 基于密度权重的查询（Density-Weighted Methods）\n",
    "    * 在使用不确定性采样或者 QBC 方法的时候，将样本数据的稠密性考虑进去。\n",
    "\n",
    "1. 流式的主动学习（Sequential Active Learning）\n",
    "1. 离线批量的主动学习（Pool-based Active Learning）\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "923d3ad7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
